Amazon RDS のデータベースプレビュー環境で MySQL 9.1 を評価出来るようになりました

Amazon RDS のデータベースプレビュー環境で MySQL 9.1 を評価出来るようになりました

Clock Icon2024.12.20

いわさです。

MySQL 8.0 以降は、LTS リリースに加えて四半期ごとのイノベーションリリースというサポート期間の短いバージョンが提供されるようになっています。
現在は MySQL 8.4 が最新の LTS リリースですが、その後新しいイノベーションリリース MySQL 9.0 と MySQL 9.1 がリリースされています。

何度か記事にしていたりするのですが、これまでも定期的にイノベーションリリースが RDS プレビュー環境というオハイオリージョンのみで使えるプレビュー評価用の環境で使うことが出来ていました。

https://dev.classmethod.jp/articles/amazon-rds-preview-mysql-8-1/

MySQL 9.0 がプレビュー環境でなかなかリリースされずおやおや?と思っていたのですが、先日 9.1 が RDS プレビュー環境で提供されるようになったというアナウンスがありました。

https://aws.amazon.com/about-aws/whats-new/2024/12/amazon-rds-mysql-innovation-release-version-9-1-rds-database-preview-environment/

MySQL 9.1 のリリースノートはこちらになります。

https://dev.mysql.com/doc/relnotes/mysql/9.1/en/news-9-1-0.html

MySQL 9.1 を使ってみる

オレゴンリージョンの RDS プレビュー環境をのぞいてみると、確かにエンジンバージョンで MySQL 9.1.0 が選択可能になっていました。
どうやら MySQL 9.0.0 はスキップされたようです。

7C038C26-C06D-4DFE-B1FC-7FE5834CE186.png

というわけで MySQL 9.1.0 と MySQL 8.4.1 を用意し、いくつか追加・変更された機能を確認してみましょう。

897D2BAB-4BA8-4907-B93C-65E780C4D535_4_5005_c.jpeg

CREATE VIEW ステートメントで IF NOT EXISTS

MySQL 9.1 では CREATE VIEW ステートメントでIF NOT EXISTSが使えるようになったみたいです。
既にビューが存在している場合は従来はエラーが発生していましたが、IF NOT EXISTSを使うとエラーを発生させずにステートメントの実行を成功させることが出来ます。

まずは 8.4 で。

mysql> use hogedb;
Database changed
mysql> create table t1 (c1 int, c2 int, c3 int);
Query OK, 0 rows affected (0.30 sec)

mysql> CREATE VIEW v1 AS SELECT c1, c3 FROM t1;
Query OK, 0 rows affected (0.19 sec)

mysql> CREATE VIEW v1 AS SELECT c2 FROM t1;
ERROR 1050 (42S01): Table 'v1' already exists
mysql> CREATE VIEW IF NOT EXISTS v1 AS SELECT c2 FROM t1;
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'IF NOT EXISTS v1 AS SELECT c2 FROM t1' at line 1

同名のビューを作成しようとするとエラーが発生しますし、IF NOT EXISTSを試してみるとシンタックスエラーが発生しますね。

では同じことを 9.1 で試してみます。

mysql> use hogedb;
Database changed
mysql> create table t1 (c1 int, c2 int, c3 int);
Query OK, 0 rows affected (0.24 sec)

mysql> CREATE VIEW v1 AS SELECT c1, c3 FROM t1;
Query OK, 0 rows affected (0.18 sec)

mysql> CREATE VIEW v1 AS SELECT c2 FROM t1;
ERROR 1050 (42S01): Table 'v1' already exists
mysql> CREATE VIEW IF NOT EXISTS v1 AS SELECT c2 FROM t1;
Query OK, 0 rows affected, 1 warning (0.18 sec)

こちらもIF NOT EXISTSなしだとエラーになりましたが、ありの場合は正常に終了しました。ただし警告が出ています。

mysql> show warnings;
+-------+------+---------------------------+
| Level | Code | Message                   |
+-------+------+---------------------------+
| Note  | 1050 | Table 'v1' already exists |
+-------+------+---------------------------+
1 row in set (0.18 sec)

警告内容としてはビューが既に存在する旨が出力されていますね。

DISTINCT と SUM を併用して異なる結果が取得される

私これ知らなかったのですが、バイナリリテラルを使った時にそのまま SUM する場合と DISTICT と SUM を併用する場合で結果が異なる問題があったようです。次のバグです。

https://bugs.mysql.com/bug.php?id=115476

SUM() yielded a different result in some cases for the same value when DISTINCT was also used. For example:

こちらが 9.1 で修正されたらしいです。見てみますか。
まずは 8.4 から。

mysql> SELECT SUM(b'1100'), SUM(DISTINCT b'1100');
+--------------+-----------------------+
| SUM(b'1100') | SUM(DISTINCT b'1100') |
+--------------+-----------------------+
|           12 |                     9 |
+--------------+-----------------------+
1 row in set (0.19 sec)

おー、そうだったのか。続いて 9.1 です。

mysql> SELECT SUM(b'1100'), SUM(DISTINCT b'1100');
+--------------+-----------------------+
| SUM(b'1100') | SUM(DISTINCT b'1100') |
+--------------+-----------------------+
|           12 |                    12 |
+--------------+-----------------------+
1 row in set (0.19 sec)

こちらは期待どおりの結果が得られていますね。

さいごに

本日は Amazon RDS のデータベースプレビュー環境で MySQL 9.1 を評価出来るようになったので試してみました。

注意点ですが、このプレビュー環境は運用環境を想定した使用は出来ません。
一定期間で削除されるなど様々な制限事項が存在します。将来的に次の LTS バージョンに備えて新機能を早めに評価したい場合などに使ってください。

Share this article

facebook logohatena logotwitter logo

© Classmethod, Inc. All rights reserved.